package com.singfan.common.util;

/**
 * GPS工具类
 * Author: hansonghe
 * Date: 2015-08-24 09:45
 * Desc:
 */
public class GPSUtil {
    //地球半径 （单位：米）
    private static final double EARTH_RADIUS = 6378137;  //地球半径

    /**
     * 计算地球上两点之间的距离（单位：米）
     * @param longitude1 第一个点的经度
     * @param latitude1 第一个点的纬度
     * @param longitude2 第二个点的经度
     * @param latitude2 第二个点的纬度
     * @return 两点之间的距离
     */
    public static int getDistance(double longitude1,double latitude1,double longitude2,double latitude2 ){
        double radLatitude1 = rad(latitude1);
        double radLatitude2 = rad(latitude2);
        double radA = radLatitude1 - radLatitude2;
        double radL = rad(longitude1) - rad(longitude2);
        double distance = 2 * EARTH_RADIUS * Math.asin(Math.sqrt(Math.pow(Math.sin(radA/2),2) + Math.cos(radLatitude1)*Math.cos(radLatitude2)*Math.pow(Math.sin(radL/2),2)));

        return (int)distance;
    }

    /**
     * 是否为正确的经度
     * @param longitudeValue 经度值
     * @return  true:是   false:否
     */
    public static boolean isLongitude(double longitudeValue) {
        return (longitudeValue >=0 && longitudeValue <= 180);
    }

    /**
     * 是否为正确的纬度
     * @param latitudeValue 纬度值
     * @return  true:是   false:否
     */
    public static boolean isLatitude(double latitudeValue) {
        return (latitudeValue >=0 && latitudeValue <= 90);
    }


    /**
     * 计算弧长
     * @param latitude 纬度
     * @return 弧长
     */
    private static double rad(double latitude) {
        return latitude * Math.PI / 180.0;
    }
}
